package cn.tedu.charcount;

import java.io.IOException;

import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Reducer;
/**
 * KEYIN:输入的键，和mapper输出的键一致
 * VALUEIN：输入的值，和mapper输出的值一致
 * KEYOUT：输出的键，在此案例是文本
 * VALUEOUT：输出的值，在此案例是最后统计的次数值
 * Reducer的输入的值就是从Mapper获取来的，也就是说，Mapper输出什么值，Reducer就接收到什么值
 * Mapper输出的什么类型，Reducer接收到的就是什么类型
 * @author waqwb
 *
 */

public class CharCountReducer
		extends Reducer<Text,LongWritable,Text,LongWritable>{
	/*
	 * key，对应的KEYIN，表示接收到的键
	 * value，是Reducer接收到的值，会将相同的键所对应的值放到一组里
	 * 形成一个迭代器
	 * context，环境参数
	 */
	@Override
	protected void reduce(Text key,
						  Iterable<LongWritable> value,
						  Reducer<Text, LongWritable, Text,
								  LongWritable>.Context context)
			throws IOException, InterruptedException {
		//初始化一个值用于统计
		long sum = 0;
		//遍历迭代器
		for (LongWritable longWritable : value) {
			//long和longWritable类型不一致，需要先调用get方法获取值
			sum += longWritable.get();
		}
		//将计算的结果写出
		context.write(key, new LongWritable(sum));
	}
}
